﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Cotizav.CONEXION;
using System.Data;
using System.Globalization;
using System.Data.Linq;

namespace Cotizav.CONTROLADOR
{
    class CtrlCotizacion_Detalle
    {
        private ConexionDataContext conexion;
        
        internal List<COTIZACION_DETALLE> getListCotizacionDetalle(string idCotizacion)
        {
            using (conexion = new ConexionDataContext())
            {
                try
                {
                    DataLoadOptions dlo = new DataLoadOptions();
                    dlo.LoadWith<COTIZACION_DETALLE>(e => e.EQUIPO);
                    dlo.LoadWith<COTIZACION_DETALLE>(c => c.COTIZACION);
                    conexion.LoadOptions = dlo;

                    return conexion.COTIZACION_DETALLE.Where(x => x.idCotizacion == idCotizacion).ToList();
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }

        internal void registrarCotizacionDetalle(COTIZACION_DETALLE cdetalle, COTIZACION cotiz, int i)
        {
            using (conexion = new ConexionDataContext())
            {
                try
                {
                    int correlativoCotizacionDetalle = conexion.COTIZAV_CORRELATIVO.Single(x => x.IDENTIFICADOR == "COTIZAV").COTIZACION_DETALLE.Value;
                    string num = Convert.ToString(correlativoCotizacionDetalle);
                    string numero = num.Trim().PadLeft(11, '0');
                    string idCotizacionDetalle = "CCT_" + numero;

                    cdetalle.idCotizacionDetalle = idCotizacionDetalle;
                    cdetalle.idCotizacion = cotiz.idCotizacion;
                    //cdetalle.secuencia = i;

                    conexion.COTIZACION_DETALLE.InsertOnSubmit(cdetalle);
                    conexion.SubmitChanges();
                    conexion.increm_ContCotizacionDetalle();
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }

        internal DataTable getListCotizacionDetallexCotizacion(string idCotizacion)
        {
            DataTable result = new DataTable();

            using (conexion = new ConexionDataContext())
            {
                var query = conexion.usp_listarCotizacionDetalle(idCotizacion);

                result.Columns.Add("codigoCotizacion", Type.GetType("System.String"));
                result.Columns.Add("fechaRegistro", Type.GetType("System.String"));
                result.Columns.Add("razonSocial", Type.GetType("System.String"));
                result.Columns.Add("referencia", Type.GetType("System.String"));
                result.Columns.Add("idCotizacion", Type.GetType("System.String"));
                result.Columns.Add("secuencia", Type.GetType("System.String"));
                result.Columns.Add("alternativa", Type.GetType("System.String"));
                result.Columns.Add("codigoEquipo", Type.GetType("System.String"));
                result.Columns.Add("serieEquipo", Type.GetType("System.String"));
                result.Columns.Add("nombreEquipo", Type.GetType("System.String"));
                result.Columns.Add("idCaracteristica", Type.GetType("System.String"));
                result.Columns.Add("cantidad", Type.GetType("System.String"));
                result.Columns.Add("nombreCaracteristica", Type.GetType("System.String"));
                result.Columns.Add("descripcion", Type.GetType("System.String"));
                result.Columns.Add("tipoCambio", Type.GetType("System.String"));
                result.Columns.Add("moneda", Type.GetType("System.String"));
                result.Columns.Add("tipoTarifa", Type.GetType("System.String"));
                result.Columns.Add("horaTarifa", Type.GetType("System.String"));
                result.Columns.Add("tarifaExt", Type.GetType("System.String"));
                result.Columns.Add("tarifaLoc", Type.GetType("System.String"));
                result.Columns.Add("dsctoenDocumento", Type.GetType("System.String"));
                result.Columns.Add("dsctoExt", Type.GetType("System.String"));
                result.Columns.Add("dsctoLoc", Type.GetType("System.String"));
                result.Columns.Add("tarifaTotalExt", Type.GetType("System.String"));
                result.Columns.Add("tarifaTotalLoc", Type.GetType("System.String"));

                DataRow dr;

                foreach (var c in query)
                {
                    dr = result.NewRow();

                    dr[0] = c.codigoCotizacion;
                    dr[1] = c.fechaRegistro.Value.ToLongDateString()?? string.Empty;
                    dr[2] = c.razonSocial.Trim() ?? string.Empty;
                    dr[3] = c.referencia.Trim() ?? string.Empty;
                    dr[4] = c.idCotizacion ?? string.Empty;
                    dr[5] = c.secuencia;
                    dr[6] = c.alternativa;
                    dr[7] = c.codigoEquipo.Trim() ?? string.Empty;
                    dr[8] = c.serieEquipo.Trim() ?? string.Empty;
                    dr[9] = c.nombreEquipo.Trim() ?? string.Empty;
                    dr[10] = c.idCaracteristica ?? string.Empty;
                    dr[11] = c.cantidad;
                    dr[12] = c.nombreCaracteristica.Trim() ?? string.Empty;
                    dr[13] = c.descripcion.Trim() ?? string.Empty;
                    dr[14] = c.tipoCambio ;
                    dr[15] = c.moneda ?? string.Empty;
                    dr[16] = c.tipoTarifa.Trim() ?? string.Empty;
                    dr[17] = c.horaTarifa;
                    dr[18] = c.tarifaExt.Value.ToString("N") ?? string.Empty;
                    dr[19] = c.tarifaLoc.Value.ToString("N") ?? string.Empty;
                    dr[20] = c.dsctoenDocumento.Value.ToString() ?? string.Empty;
                    dr[21] = c.dsctoExt.Value.ToString("N") ?? string.Empty;
                    dr[22] = c.dsctoLoc.Value.ToString("N") ?? string.Empty;
                    dr[23] = c.tarifaTotalExt.Value.ToString("N") ?? string.Empty;
                    dr[24] = c.tarifaTotalLoc.Value.ToString("N") ?? string.Empty;

                    result.Rows.Add(dr);
                }

                return result;
            }
        }

        internal DataTable getListCotizacionDetallexCotizacionxVenta(string idCotizacion)
        {
            DataTable result = new DataTable();

            using (conexion = new ConexionDataContext())
            {
                var query = conexion.usp_listarCotizacionDetalle_Venta(idCotizacion);

                result.Columns.Add("codigoCotizacion", Type.GetType("System.String"));
                result.Columns.Add("fechaRegistro", Type.GetType("System.String"));
                result.Columns.Add("razonSocial", Type.GetType("System.String"));
                result.Columns.Add("referencia", Type.GetType("System.String"));
                result.Columns.Add("idCotizacion", Type.GetType("System.String"));
                result.Columns.Add("secuencia", Type.GetType("System.String"));
                result.Columns.Add("alternativa", Type.GetType("System.String"));
                result.Columns.Add("codigoEquipo", Type.GetType("System.String"));
                result.Columns.Add("serieEquipo", Type.GetType("System.String"));
                result.Columns.Add("horasEquipo", Type.GetType("System.String"));
                result.Columns.Add("anio", Type.GetType("System.String"));
                result.Columns.Add("nombreEquipo", Type.GetType("System.String"));
                result.Columns.Add("idCaracteristica", Type.GetType("System.String"));
                result.Columns.Add("cantidad", Type.GetType("System.String"));
                result.Columns.Add("nombreCaracteristica", Type.GetType("System.String"));
                result.Columns.Add("descripcion", Type.GetType("System.String"));
                result.Columns.Add("tipoCambio", Type.GetType("System.String"));
                result.Columns.Add("moneda", Type.GetType("System.String"));
                result.Columns.Add("tarifa", Type.GetType("System.String"));
                result.Columns.Add("impuestos", Type.GetType("System.String"));
                result.Columns.Add("tarifaTotal", Type.GetType("System.String"));

                DataRow dr;

                foreach (var c in query)
                {
                    dr = result.NewRow();

                    dr[0] = c.codigoCotizacion;
                    dr[1] = c.fechaRegistro.Value.ToLongDateString()?? string.Empty;
                    dr[2] = c.razonSocial.Trim();
                    dr[3] = c.referencia.Trim();
                    dr[4] = c.idCotizacion;
                    dr[5] = c.secuencia;
                    dr[6] = c.alternativa;
                    dr[7] = c.codigoEquipo.Trim();
                    dr[8] = c.serieEquipo.Trim();
                    dr[9] = c.horasEquipo.ToString().Trim();
                    dr[10] = c.anio.Trim();
                    dr[11] = c.nombreEquipo.Trim();
                    dr[12] = c.idCaracteristica.Trim();
                    dr[13] = c.cantidad.ToString().Trim();
                    dr[14] = c.nombreCaracteristica.Trim();
                    dr[15] = c.descripcion.Trim();
                    dr[16] = c.tipoCambio.GetValueOrDefault(new decimal(0)).ToString("N") ?? string.Empty;
                    dr[17] = c.moneda.ToString();
                    dr[18] = c.tarifa.GetValueOrDefault(new decimal(0)).ToString("N") ?? string.Empty;
                    dr[19] = c.impuestos.GetValueOrDefault(new decimal(0)).ToString("N") ?? string.Empty;
                    dr[20] = c.tarifaTotal.GetValueOrDefault(new decimal(0)).ToString("N") ?? string.Empty;

                    result.Rows.Add(dr);
                }

                return result;
            }
        }
    }
}
